<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
      "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Introducción</title>
  <meta name="generator" content="Amaya, see http://www.w3.org/Amaya/">
</head>

<body>
<h1>Introducción</h1>

<p>El presente libro fue ideado principalmente para aquellos que si bien poseen
mucha experiencia programando en diversas áreas, encuentran muy difícil
insertarse en el mundo de la programación competitiva, ya sea por falta de
práctica (la gran mayoría) o debido a que es un área que demanda estar en
una constante fase de aprendizaje, por lo que necesita mucha dedicación,
puesto que se deben incorporar conocimientos nuevos para poder lidiar con las
restricciones de tiempo y velocidad impuestas en las competencias de
programación.</p>

<p>Sabemos lo frustrante que puede llegar a ser enviar un código a un juez en
línea más de 27 veces, obteniendo siempre como respuesta Wrong Answer, o peor
aún, la tan temida Time Limit Exceeded!! Nosotros no somos la excepción,
también tuvimos —y tenemos— que lidiar con estos altibajos, es por eso que
decidimos aprender a enfrentar dichos problemas, leyendo la bibliografía que
ya está disponible y desarrollando una a una las herramientas más comunes que
sirven para resolver la mayoría de los problemas propuestos por estas
competencias.</p>

<p>Luego de haber tenido algo de experiencia participando en varias instancias
de la Competencia Regional ACM-ICPC, y haber resuelto problemas disponibles en
las páginas con jueces en línea mediante las herramientas que fuimos
desarrollando, estuvimos en condiciones de detectar buenas prácticas de
programación y esquemas de trabajo en equipo, para optimizar el tiempo de
pensado y entendimiento de los enunciados, así como la cantidad de problemas
resueltos.</p>

<p>Este libro por lo tanto, explica de forma clara y concisa las herramientas y
algoritmos que se han desarrollado a lo largo de los años en el campo de la
informática, para lidiar con los problemas habituales que suelen aparecer en
todas las competencias de programación competitiva, analizadas desde nuestra
perspectiva, agregando comentarios relativos a nuestra experiencia y poniendo a
disposición algoritmos útiles que se utilizarán en gran medida para resolver
cuestiones que en una competencia no deberían requerir mayor atención,
dejando al lector la posibilidad de canalizar sus esfuerzos en descubrir la
mejor solución a un problema dado, sin tener que preocuparse en algunos
módulos intermedios del algoritmo principal ya que felizmente serán
implementaciones de los algoritmos presentados en este ejemplar.</p>

<h1>Notación y convenciones</h1>

<h2>Pseudocódigo</h2>

<p>A lo largo del libro utilizaremos un pseudocódigo particular para
representar los distintos algoritmos, haciendo valer las siguientes
convenciones sencillas en cuanto a la notación del mismo:</p>
<ul>
  <li>Las palabras MIENTRAS, PARA … HACER, SI … SINO, etc. tienen el mismo
    significado semántico que en un lenguaje de programación convencional,
    como en C++, y se utilizarán como bifurcaciones y ciclos condicionales en
    el flujo de los algoritmos.</li>
  <li>La indentación servirá para separar los distintos bloques estructurales
    del pseudocódigo y mejorar la legibilidad del mismo.</li>
  <li>Nos valdremos del pseudocódigo para expresar los algoritmos en un alto
    nivel de abstracción, por lo que una sola sentencia en pseudocódigo
    (breve oración describiendo una función), puede representar varias
    sentencias de código en un lenguaje como C++.</li>
  <li>Las funciones simples se representarán en minúsculas, encerrando los
    respectivos parámetros entre paréntesis. Por ejemplo, si se desea obtener
    el tamaño de un vector A usamos la función <em>tamaño</em>(A).</li>
  <li>Para los vectores, los accesos mediante subíndices se realizarán de la
    siguiente forma: para acceder al <em>i</em>-ésimo elemento del vector A se
    escribirá solamente A[<em>i</em>].</li>
  <li>Para estructuras de datos más complejas, las cuales pueden estar
    formadas por varios campos, se usará la notación “punto” de los
    lenguajes de programación orientados a objetos para acceder a dichos
    campos. Ej.: Alumno.<em>nombre</em></li>
  <li>Todas las variables y parámetros de las funciones son locales a su
    ámbito (los parámetros se pasan por valor <span
    style="background-color:#ffff00">VER</span>), se explicitarán los casos
    donde se usen variables globales y se argumentará sobre el por qué de su
    uso.</li>
  <li>Los test condicionales se evaluarán con la modalidad de "cortocircuito",
    esto significa que dada una expresión, por ejemplo <em>"A
    </em><strong>y<em></em></strong><em>B</em>", se evaluará primero el valor
    lógico de <em>A</em> y de acuerdo al resultado se decidirá evaluar o no
    <em>B</em>. Los resultados lógicos se representarán con:
    <strong>verdadero</strong> y <strong>falso</strong>. Los operadores
    lógicos son los siguientes: <strong>y</strong>: y lógico;
    <strong>o</strong>: o lógico; <strong>no</strong>: negación lógica;
    <strong>ox</strong>: o lógico excluyente.</li>
  <li>Se usará la expresión <strong>nulo</strong> para representar un valor
    especial que dependiendo del contexto puede significar "sin valor" o "no
    definido". <span style="background-color:#ffff00">VER</span></li>
</ul>

<h2>Pseudocódigo de ejemplo</h2>

<p><span style="background-color:#ffff00">VER si queda, no se si poner ejemplos
acá... De última se puede poner otro un poco más largo...</span></p>

<p></p>

<p><span style="font-size: 14pt">F</span>ACTORIAL(<em>a</em>):</p>

<p style="margin-left:2em;"><strong>si</strong> <em>a = 0</em>
<strong>o</strong> <em>a = 1</em></p>

<p style="margin-left:4em"><strong>devolver</strong> <em>1</em></p>

<p style="margin-left:2em;"><strong>sino</strong></p>

<p style="margin-left:4em"><strong>devolver</strong> <em>a</em> * <span
style="font-size: 14pt">F</span>ACTORIAL(<em>a - 1</em>) </p>

<h1>Complejidad</h1>

<h2><span style="background-color:#ffff00"><span
style="background-color:#ffff00"><span style="background-color:#ffff00"><span
style="background-color:#ffffff"><span
style="background-color:#ffffff"></span>Introducción</span></span></span></span></h2>

<h2>Notación asintótica</h2>

<p>PONER SOLO NOTACION O, GRAFICOS</p>

<h2>Tipos de complejidad</h2>

<p>Lista ordenada en forma decreciente de todas las complejidades.
Clasificación algoritmos (NP, NP-Completos, P, etc.)</p>

<h2>Análisis de complejidad en los algoritmos</h2>

<p>Algoritmo de ejemplo con su respectivo análisis, grafico o lo q sea del
seguimiento q se debería hacer, técnicas a tener en cuenta a la hora de
analizar la complejidad de un algoritmo y si lo deberíamos usar en una
competencia (evaluar las implicancias de su uso)</p>
</body>
</html>
